-
Notifications
You must be signed in to change notification settings - Fork 0
Feat: [FN-43] 로그인 #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough로그인 및 로그아웃 시 리프레시 토큰 쿠키 처리가 HttpServletResponse에서 응답 헤더로 변경되었습니다. 로그인 요청/응답 DTO가 UserLoginDto에서 UserLoginRequest/UserLoginResponse로 대체되었고, 서비스 및 레포지토리 계층에서 사용자 상태를 확인하도록 수정되었습니다. 테스트 코드와 쿠키 유틸리티도 이에 맞게 리팩토링되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant AuthController
participant AuthService
participant UserRepository
participant CookieUtil
Client->>AuthController: POST /login (UserLoginRequest)
AuthController->>AuthService: login(UserLoginRequest)
AuthService->>UserRepository: findByEmailAndStatus(email, ACTIVE)
UserRepository-->>AuthService: User or empty
AuthService->>AuthService: 비밀번호 검증
AuthService-->>AuthController: TokenPair
AuthController->>CookieUtil: createCookie(...)
CookieUtil-->>AuthController: Cookie
AuthController-->>Client: Response(헤더에 쿠키, body에 UserLoginResponse)
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
src/main/java/project/flipnote/auth/controller/AuthController.java(2 hunks)src/main/java/project/flipnote/auth/model/UserLoginDto.java(0 hunks)src/main/java/project/flipnote/auth/model/UserLoginRequest.java(1 hunks)src/main/java/project/flipnote/auth/model/UserLoginResponse.java(1 hunks)src/main/java/project/flipnote/auth/service/AuthService.java(3 hunks)src/main/java/project/flipnote/common/util/CookieUtil.java(2 hunks)src/main/java/project/flipnote/user/repository/UserRepository.java(1 hunks)src/test/java/project/flipnote/auth/service/AuthServiceTest.java(3 hunks)src/test/java/project/flipnote/fixture/UserFixture.java(1 hunks)
💤 Files with no reviewable changes (1)
- src/main/java/project/flipnote/auth/model/UserLoginDto.java
🔇 Additional comments (19)
src/main/java/project/flipnote/auth/model/UserLoginResponse.java (1)
3-10: 깔끔한 DTO 구조 설계레코드 클래스를 사용한 간결하고 불변한 응답 DTO 구조가 잘 설계되어 있습니다. 정적 팩토리 메서드를 통해 객체 생성 의도를 명확히 표현한 점도 좋습니다.
src/main/java/project/flipnote/user/repository/UserRepository.java (2)
8-8: UserStatus import 추가 확인새로운 메서드 시그니처에 필요한 UserStatus 임포트가 적절히 추가되었습니다.
16-16: 사용자 상태 기반 필터링 로직 추가활성 사용자만 로그인할 수 있도록 하는 보안 강화 로직이 잘 구현되어 있습니다. 메서드명도 의도를 명확히 표현하고 있습니다.
src/main/java/project/flipnote/auth/model/UserLoginRequest.java (2)
9-10: 이메일 필드 검증 로직이메일 필드에
@NotBlank어노테이션이 적절히 적용되어 있어 입력값 검증이 잘 구현되어 있습니다.
12-13: 비밀번호 커스텀 검증 어노테이션비밀번호 필드에
@ValidPassword커스텀 검증 어노테이션이 적용되어 있어 비밀번호 정책을 일관되게 적용할 수 있습니다.src/test/java/project/flipnote/fixture/UserFixture.java (2)
9-11: 테스트 상수 정의테스트에서 사용할 상수들이 명확하게 정의되어 있어 테스트 데이터의 일관성을 보장할 수 있습니다.
12-21: 활성 사용자 생성 픽스처ReflectionTestUtils를 사용해 테스트 환경에서 private 필드를 설정하는 것은 적절한 방법입니다. 활성 사용자 생성 로직이 명확하고 재사용 가능한 구조로 잘 구현되어 있습니다.
src/main/java/project/flipnote/auth/service/AuthService.java (6)
18-18: 새로운 요청 DTO importUserLoginRequest 임포트가 적절히 추가되어 새로운 DTO 구조를 지원합니다.
23-23: UserStatus import 추가활성 사용자 확인 로직을 위한 UserStatus 임포트가 적절히 추가되었습니다.
39-45: 로그인 메서드 리팩토링메서드 시그니처가 새로운 DTO 구조에 맞게 업데이트되었고, 활성 사용자 확인 로직이 추가되어 보안이 강화되었습니다. 비밀번호 검증 로직도 별도 메서드로 분리되어 코드 가독성이 향상되었습니다.
87-90: 활성 사용자 조회 로직활성 상태의 사용자만 로그인할 수 있도록 하는 보안 강화 로직이 잘 구현되어 있습니다. 메서드명도 의도를 명확히 표현하고 있습니다.
92-96: 비밀번호 검증 로직 분리비밀번호 매칭 검증 로직이 별도 메서드로 분리되어 코드의 가독성과 재사용성이 향상되었습니다.
98-119: 검증 헬퍼 메서드들여러 검증 로직들이 명확한 메서드명으로 분리되어 있어 코드의 가독성과 유지보수성이 크게 향상되었습니다. 각 메서드가 단일 책임을 가지고 있어 SOLID 원칙을 잘 준수하고 있습니다.
src/test/java/project/flipnote/auth/service/AuthServiceTest.java (2)
164-239: 로그인 테스트 구현이 잘 되어 있습니다.새로 추가된 Login 테스트 클래스가 성공/실패 시나리오를 모두 포함하여 포괄적으로 작성되었습니다. 특히 다음 사항들이 잘 구현되었습니다:
- 성공 케이스에서 모든 의존성 호출 검증
- 실패 케이스에서 적절한 예외 처리 및 호출되지 않아야 할 메서드 검증
- 새로운 UserLoginRequest DTO 사용
- UserFixture.createActiveUser() 사용으로 일관된 테스트 데이터 생성
175-175: 확인 완료: UserFixture.createActiveUser() 비밀번호 일치
UserFixture.createActiveUser()가 반환하는 비밀번호는ENCODED_PASSWORD상수("encodedPass")이며, 테스트 내encodedPassword변수 역시"encodedPass"로 동일하게 사용되고 있습니다. 따라서 별도 수정 없이 의도한 대로 동작합니다.src/main/java/project/flipnote/common/util/CookieUtil.java (1)
11-32: 쿠키 유틸리티 리팩토링이 잘 되어 있습니다.쿠키 생성과 응답 처리를 분리한 리팩토링이 매우 좋습니다. 다음과 같은 개선사항들이 있습니다:
- 단일 책임 원칙 준수: 쿠키 생성만 담당
- 테스트 가능성 향상: Cookie 객체 반환으로 테스트 용이
- 재사용성 증가: 다양한 응답 처리 방식에 활용 가능
메서드 시그니처와 기본값 설정도 적절합니다.
src/main/java/project/flipnote/auth/controller/AuthController.java (3)
32-47: 로그인 엔드포인트 구현이 잘 되어 있습니다.새로운 DTO와 쿠키 처리 방식을 적절히 활용하여 구현되었습니다. 특히 다음 사항들이 개선되었습니다:
- 새로운 UserLoginRequest/UserLoginResponse DTO 사용
- HttpHeaders.SET_COOKIE를 통한 명시적 쿠키 설정
- JwtProperties를 통한 설정 기반 만료 시간 관리
50-56: 로그아웃 엔드포인트 구현이 깔끔합니다.만료된 쿠키를 생성하여 기존 쿠키를 무효화하는 방식이 적절하게 구현되었습니다. 쿠키 유틸리티의
createExpiredCookie메서드를 효과적으로 활용하고 있습니다.
41-41: Math.toIntExact 안전성 확인 완료현재 application.yml에서 설정된
- access-token-expiration: 1h → 3,600s
- refresh-token-expiration: 7d → 604,800s
값 모두 Java int 최대값(2,147,483,647)을 크게 밑돌아
Math.toIntExact호출 시ArithmeticException발생 위험이 없습니다.
따라서 별도의 예외 처리 없이 사용해도 무방합니다.
src/test/java/project/flipnote/auth/service/AuthServiceTest.java
Outdated
Show resolved
Hide resolved
stoneTiger0912
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P1: 리뷰 확인했습니다.
📝 변경 내용
✅ 체크리스트
💬 기타 참고 사항
Summary by CodeRabbit
신규 기능
버그 수정
리팩터
테스트